perm filename NOTAT.ION[L70,TES] blob sn#017424 filedate 1972-12-13 generic text, type T, neo UTF8
00100	ADDITIONS TO MLISP SYNTAX TO ACCOMODATE REWRITE RULES:
00200	--------- -- ----- ------ -- ---------- ------- -----
00300	
00400	<BASIC>		= `{'  <PATTERN>  `}'
00500	
00600	<PRIMARY>	= `<' <IDENTIFIER> `>'  <RLAMBDA_BODY>
00700	
00800	
00900	REWRITE SYNTAX:
01000	------- ------
01100	
01200	<RLAMBDA_BODY>	= ⊂REPEAT  {`=' <PATTERN> `→' <PATTERN>}  `;'⊃
01300	
01400	<PATTERN>	= ⊂REPEAT <ITEM>⊃   ⊂OPT <PREDICATION>⊃   ⊂OPT <CAUSATION>⊃
01500		
01600	<PREDICATION>	= `[' <EXPRESSION> `]'
01700		
01800	<CAUSATION>	= `&' <EXPRESSION>
01900		
02000	<ITEM>		= <LITERAL_ITEM>
02100			= <ITERATED_ITEM>
02200			= <EVAL_ITEM>
02300			= <APPLY_ITEM>
02400			= <MODAL>
02500			= `{'  <PATTERN>  `}'
02600		
02700	<LITERAL_ITEM>	= <IDENTIFIER>
02800			= <NUMBER>
02900			= <STRING>
03000			= `≡`'  ⊂REPEAT <DELIMITER>⊃  `≡''
03100			= `(' <PATTERN> `)'
03200			= `(' <PATTERN> `.' <PATTERN> `)'
03300		
03400	<ITERATED_ITEM>	= `⊂' REPEAT <ITEM> <PATTERN> `⊃'
03500			= `⊂' ALT  ⊂REPEAT <PATTERN> `|'⊃ `⊃'
03600			= `⊂' OPT <PATTERN> `⊃'
03700		
03800	<EVAL_ITEM>	= <COLONS> <IDENTIFIER>
03900			= <COLONS> `$' <IDENTIFIER>
04000			= <COLONS> `(' <EXPRESSION> `)'
04100			= <COLONS> `[' <ITEM> <PATTERN> `]'
04200			= <COLONS> `{' <EXPRESSION> `}'
04300			= `..'
04400			= `...'
04500		
04600	<APPLY_ITEM>	= <ITEM> `@' <ITEM>
04700			= <ITEM> `@@' <ITEM>
04800			= <ITEM> `*'
04900			= <ITEM> `**'
05000		
05100	<MODAL>		=  `<'  <ITEM> <PATTERN>  `>'
05200		
05300	<COLONS>	= `:'
05400			= `::'
05500	EXAMPLES
05600	________
05700	
05800	<EQ>	= :X :X → T ;
05900		= :X :Y → NIL ;
06000	
06100	<ASSOC>	= :X  (... (:X ::Y)) → (:X ::Y) ;
06200		= ... → NIL ;
06300	
06400	<TERM>	= <FACTOR:X> `*' <FACTOR:Y> → (TIMES :X :Y) ;
06500		= <FACTOR:X> `/' <FACTOR:Y> → (QUOTIENT :X :Y) ;
06600		= ... → :[FAIL] ;
06700	
06800	<FACTORIAL>	= 0 → 1 ;
06900			= <INTEGER:N> [:N > 0] → :[TIMES :N  :(N-1)*] ;
07000	
07100	<GO_IN>	= :ROBOT :ROOM [BE_IN(:ROBOT,:ROOM)] → ;
07200		= :ROBOT :ROOM [BE_IN(:ROBOT,:R) ∧ HAS(:ROOM,:DOOR) ∧ HAS(:R,:DOOR)] →
07300			& GO_DOOR(:ROBOT, :DOOR) ALSO GO_IN(:ROOM) ;
07400		= ... → :[FAIL] ;
07500	
07600	<RECOVER>	= &BUMP(:ROBOT,:WALL) → &BACKOFF(:ROBOT,:WALL) ALSO REPLAN(THISPLAN) ;
07800	
07900	<ROOTS>	= :{ :A*:X↑:2 + :B*:X + :C } →
08000			:((-B+SQRT(B*B-4*A*C))/(2*A))
08100			:((-B-SQRT(B*B-4*A*C))/(2*A)) ;
08200		= :{ :A*:X + :B } → :(-B/A) ;
08300		= :X → {} & PRINT("CAN'T SOLVE  {:X@{INVERSE EXPRESSION}} = 0") ;